stage4day4section1-4

Section1:強化学習

「エージェント」が「環境」の「状態」に応じてどのように「行動」すれば「報酬」が多くもらえるかを決める手法。

教師あり学習や教師なし学習と違い、

学習データなしに自身の試行錯誤のみで学習するのが特徴。

教師あり学習、教師無し学習 人間が成長する過程で自然に学んでいくプロセスと同じ

強化学習 人間が仕事で成果を出していくプロセスと同じ

⇒ AIを活用して何らかのタスクを実行し成果を期待しているので、この分野が注目されている。

・Q学習と関数近似法が理論的に重要  関数近似法が発明される前は、

 「◯◯のときに□□を入れる」といったような膨大なリストを用意していた

・目標設定に当たるものが価値 (囲碁で言うと、勝敗が価値となる)  - 状態価値関数 : 環境の状態が価値を変えるもの

  (盤面の並びの状態だけ)

 - 行動価値関数 : 状態と行動を基に価値が決まる

 (盤面の状態の中でどういう一手を置くか)Q学習で使う。

・方策関数(囲碁で言うと、一手一手を考える)  - 方策関数の結果に基づいて、エージェントは行動する

・方策勾配法  関数にできれば、NNにすることが出来き学習できる。  重みとしてθを取る

・NNの誤差関数を減らしていくことが学習に対して、

 強化学習では期待収益増やしていくことが学習になる

Section2:AlphaGo

AlphaGoには

AlphaGo (Lee)とAlphaGo Zeroがある

■AlphaGo (Lee)の説明

李 世乭 Lee Sedolと戦ったプログラム

PolicyNet 方策関数

ValueNet 価値関数

2次元の場合はConvolutionするしかない(定石)  最後が1次元なら全結合するしかない

・いきなり強化学習をやってもうまくいかないので、最初は教師あり学習をやる

・次の一手を考えるのに、3ミリ秒かかるが、

 何億回もやろうとすると結構なボリュームになる  何日とか掛かる

⇒ 精度は落ちるがスピード重視のものを使う  ⇒ RollOutPolicy(NNではなく、線形の方策関数)1000倍速い  ⇒ 3マイクロ秒/1手でできる

・教師あり学習において、RollOutPolicyを用いる

・3000万局面分の過去の人間vs人間の棋譜を学習させる(57%人間と同じ手を打つ)

・モンテカルロ木探索   現在、最も囲碁ソフトで使われている探索法  ⇒ 価値関数を学習させるときに用いる

■AlphaGo Zero 後発

         スクラッチで作らている

強化学習のみで作成 

*人間vs人間の棋譜を学習させていない

- ヒューリスティックな要素を排除 

- PolicyNetとValueNetを統合(枝分かれ構造) 

- Residual Netを導入 

 Residual Netにはショートカット構造が追加されている

- モンテカルロ木探索からRollOutシミュレーションをなくした

・ネットワークが深くなる ⇒ 潜在的に勾配消失(勾配爆発)問題が発生  ⇒ ショートカットを入れてやる  ⇒ いろいろなパターンのネットワークを模擬できる(アンサンブル効果)

・E資格では、モデルの特徴が良く出題される

・現代の深層学習モデルでの根本的なネットワーク構造は、以下4つ  - 畳み込み  - プーリング  - RNN  - Attention

この4つは超重要!!

残りは上記4つの組み合わせが多い

論文書いた人が◯◯Netとか勝手に名前をつけている事が多い。

Section3:軽量化・高速化技術

モデル並列・データ並列・GPU

→高速化技術 モデルをいかに速く学習するか

量子化・蒸留・プルーニング

→軽量化技術 スマホとか簡易なデバイスでもモデルを動かせるようにしよう

・分散深層学習(最も大切な技術)

- ノートパソコンを複数台準備して、並列に学習させるイメージ。またはCPUの数を増やす。

- 毎年10倍の勢いで計算量が増えている

- コンピュータ(ワーカー)を増やす、CPUを増やす、GPU, TPUを使う、夜間の充電中のスマホを使う

・データ並列化

  工夫の仕方

  - 親モデルを子モデルにコピーして、

   子モデルたちの勾配の平均値でパラメータを更新し、再度コピーする

  (同期型 : 各ワーカーが計算が終わるのを待つ、

   非同期型 : 各ワーカーはお互いの計算完了を待たない代わりに、

   パラメータサーバーに順次結果を入れていく)

  - 非同期型の方が処理は速いが、学習が不安定になりやすい

   - 同期型か非同期型かは使い方による

   (上記スマホの夜間利用のケースは非同期、自分たちでコントロールできるなら同期)

・モデル並列化

  工夫の仕方

  - 枝分かれ分割が主流

  - 1台のPCで4つのGPUを接続して、みたいな使い方が多い

  - データを集める際、ネットワーク経由だと遅い

  - モデルが大きい ⇒ モデル並列化

  - データが大きい ⇒ データ並列化

  - 大きなモデルの方が、並列化の効果が高い

   小さいモデルだと並列化効果が低い 例:人を沢山雇ってもタスクが小さいと不効率

  (参照論文Google, 2016, Large Scale Distributed Deep Networks)

  - 並列化による計算の効率化と分割したデータを集める時間のトレードオフ

  - モデルの大きさはパラメータの数で示す

・GPUによる高速化

  もともとはゲームや画像処理に特化したチップだったが、それを活用した

  - CPU : 少数精鋭主義、優秀な人が少数で作業するイメージ

   2秒/1画像

  - GPU : 簡単な(行列計算)並列処理が得意、普通の人がいっぱいて作業するイメージ

   0.5秒/1画像

  - GPGPU

  - CUDA(NVIDIA)

  - Open CL(あまり使われていない)

・量子化  *軽量化で一番良く使う。量子コンピュータの話ではない。

  重みの精度を下げることでメモリと演算処理の削減を行うこと。

  通常のパラメータの64bit浮動小数点を

  32bitなど下位の精度に落とす、など

  - 計算は速く、省メモリ化が可能となるが精度は低下する

  - 目盛を多く使う原因は重み(パラメータ)の情報(BERTだと数十億個)

  - 2 Byte(半精度)、4 Byte(単精度)、16 Byte(倍精度)

  - 64bitで量子化 ⇒ メモリが4GB、32bitで量子化 ⇒ メモリが2GB

  - 前半5bitで整数の表現、後半11bitで小数の表現

  - 大きなbit数で細かい数字まで表現できる

  - 何ビットで表現するかが量子化の程度

  - 16bitで150FLOPS程度

  - 半精度でわりと十分

  - 8 bitの小数は現在使われていない

・蒸留

  - 精度が高いモデルをまず作って、その後軽量なモデルを作る

  - 教師モデル(学習済み)と生徒モデル

  

  組み込み系のAI装置に活用されている  

  例)顔認識機能を持つスマホやサーマルカメラ

・プルーニング

  - 寄与の少ないニューロンを削減して、軽量化

  - 重みが閾値以下のニューロンを削減し、再学習

  - 意外と性能が変わらない

例)CaffeNetでパラメーターを9割減らしても精度があまり変わらない

Section4:応用モデル

ネットワークに関する問題(特徴)がよく出る

・画像認識モデルは2017年頃にほぼ完成していて、実用化されている  その後は軽くて精度の良いものが研究されている

■MobileNet  先駆けとなった画像認識 最新版は第3世代

 - 一般的な畳み込みレイヤーでの計算量が多いため、削減したい   (計算量H x W x K x K x C x M)

ここで工夫が2つ

工夫1  - Depthwise Convolution   > フィルタ数は1に固定   > 1つのチャンネルに対して、1枚のフィルタで畳み込みを実施   (計算量H x W x K x K x C x 1)

工夫2  - Pointwise Convolution   > カーネルサイズを1 x 1に固定して、複数のフィルタで畳み込みを実施   (計算量H x W x 1 x 1 x C x M)

もともと

H x W x K x K x C x M 必要だった計算が

(H x W x K x K x C x 1) +(H x W x 1 x 1 x C x M) で同程度が期待できる。

つまり

KK+MKKM\frac{KK+M}{KKM} に計算量を圧縮できる。

確認テスト

答え

(い)H x W x K x K x C x 1 Depthwise Convolution

(う)H x W x 1 x 1 x C x M Pointwise Convolution

■DenseNet  - 画像認識のモデル  - Denseブロックが特徴   > Batch正規化   > Relu   > 3 x 3の畳み込み  - 1層通過するごとにkずつチャンネルが増えていく   (k : ネットワークのGrowth Rate)  - チャンネル数が増え過ぎないようにTransitiion Layerがある

 - ResNetのSkip Connectionとの違い 

> ResNetは前の層から結合に対して、 

>ハイパーパラメータ k : Growth Rate(成長率)

■Batch Normalizatiion  - ミニバッチ単位で正規化する(平均が0、分散が1)   > バッチサイズに影響を受ける   > 理論的には順当な方法だが、実用ではあまり使いたくない、使えない    >> 学習時のハードウェア性能によって、ミニバッチのサイズを変えざるを得ないため    >> 再現性に欠ける

■Layer Normalization  - 1枚毎の画像で正規化を行う。RGBであってもごちゃまぜにして1枚にする。  - TPUだと画像100枚ぐらいがミニバッチの上限  - CPUだと数十枚程度  - 統計的に正しいのはミニバッチだが、レイヤーでもうまくいったので実用されている  - 入力データのスケール、重み行列のスケールやシフトに対してロバスト=堅牢  - 正規化はデータの特徴をそろえるイメージ

■Instance Normalization -各チャンネル独立に画像の縦横方向についてのみ平均・分散を取る -なぜか上手くいく

■WaveNet  - 音声生成モデル(RNNではなくCNN)   (時系列データに対して、畳み込みを適用)  - とびとびに畳み込み処理をやっていける   (幅広い範囲のデータを得ながら、出力を一定レベルに保てる)  - Dilated casual convolution  - パラメータに対する受容野が広い

利点

「層が深くなるにつれて畳み込むリンクを離す」

「受容野を簡単に増やすことができる」

・逆畳み込み演算  - 解像度を上げる時など   古いビデオを4kにする時など

確認テスト